/*******
 * @description: [currency 金额格式化函数]
 * @author: 琴时
 * @param {value} [传进来的值]
 * @param {currency} [货币符号]
 * @param {decimals} [小数位数]
 * @return {*} [返回格式好的金额]
 */

export const currency = (value, currency, decimals) => {
  const digitsRE = /(\d{3})(?=\d)/g //匹配数字之前的3个数字
  value = parseFloat(value) //转换成数值保留小数
  // 如果传过来的值不是有限数值或者值不存在且值不等于0
  if (!isFinite(value) || (!value && value !== 0)) return '' //isFinite判断是否是有限数值
  currency = currency ? currency : '$' //如果有指定金币符号就直接用，否则使用美元符号
  decimals = decimals ? decimals : 2 //如果有指定小数位就直接用，否则使用2位小数
  const stringified = Math.abs(value).toFixed(decimals) //取数值的绝对值后decimals位小数
  const _int = stringified.slice(0, -1 - decimals) //取整数部分
  const remainder = _int.length % 3 //因为金额都是每3个划分,划分后取剩余的（整数部分取余）
  const head =
    remainder > 0 ? _int.slice(0, remainder) + (_int.length > 3 ? ',' : '') : ''
  // 计算划分后头部(整数部分超过三位头部加上逗号)
  const _float = stringified.slice(-1 - decimals) //取小数部分加上小数点
  const sign = value < 0 ? '-' : '' //判断正负数
  return (
    sign +
    currency +
    head +
    _int.slice(remainder).replace(digitsRE, '$1,') + //digitsRE, '$1,'==>每3位加1逗号
    _float
  )
}

/**
 * 测试用例
 * 将src/index.js底部执行函数:selectTest(params)的实参params改为2
 * 直接无法测试，请使用npm run dev或者去掉 export 使用node运行当前界面测试即可
 */
// console.log('金额格式化:', currency(111000.526, '￥', 2)) //金额格式化: ￥111,000.53
